﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

namespace Atacadao.Comum.DataAnnotation
{
    public class MaiorIgualQueAttribute : ValidadorComparadorBase, IClientValidatable 
    {
        
        public MaiorIgualQueAttribute(string campo2, TipoComparacao tipo):
            base(campo2, tipo)
        {
            
        }

        
        protected override ValidationResult IsValid(object primeiroValor, ValidationContext validationContext)
        {
            var primeiro = primeiroValor as IComparable;
            var segundo = this.RecuperarSegundoComparador(validationContext);

            if (primeiro != null && segundo != null)
            {
                int comparacao = primeiro.CompareTo(segundo);

                if (comparacao < 1 || comparacao == 0)
                {
                    return new ValidationResult(
                        FormatErrorMessage(validationContext.DisplayName));
                }
            }

            return ValidationResult.Success;
        }



        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule();
            rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName());
            rule.ValidationParameters.Add("campo2", this.Campo2);
            rule.ValidationParameters.Add("tipo", this.Tipo.ToString());
            rule.ValidationType = "maiorigualque";
            yield return rule;
        }
    }
}